/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controleur;

import ASAExpr.ASAExpr;
import ASAInst.ASAInstAppelFonction;
import ASAInst.ASAInstFonction;
import exception.DivisionByZeroException;
import exception.FonctionNonDefinieException;
import exception.NbParametresIncorrectException;
import exception.VariableNonDeclareeException;
import exception.TexteVideException;
import generation.Interpreteur;
import generation.ParseException;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

/**
 *
 * @author FM & KB
 */
public class Programme {

    //Premiere fonction appellée par l'application
    public static String MAIN = "main";
    private ASAInstAppelFonction lanceurProg;
    private ASAInstFonction prog;
    private Interpreteur interpreteur;
    private InputStream is;

    public Programme() {
        prog = null;
    }

    public void executer() throws FonctionNonDefinieException,
            NbParametresIncorrectException, VariableNonDeclareeException,
            DivisionByZeroException {
        Map<String, ASAExpr> params = new HashMap<String, ASAExpr>();
        lanceurProg = new ASAInstAppelFonction(MAIN, params);
        prog = lanceurProg.initialiseMain();
        prog.executer();

    }

    public void parse(InputStream is) throws ParseException, TexteVideException, FileNotFoundException, FonctionNonDefinieException, VariableNonDeclareeException, DivisionByZeroException {
        this.is = is;
        interpreteur = new Interpreteur(this.is);
        interpreteur.run();
    }
}
